-- 添加错误处理包装
local success, err = pcall(function()
    require("ui_config")
end)

if not success then
    print("加载UI配置失败: " .. tostring(err))
    print("使用默认UI配置...")
    
    -- 设置默认UI配置
    功能选择 = "滑动刷视频"
    话术语 = "默认话术"
    任务间隔 = "1000"
    运行时间 = 3  -- 默认3分钟
    点赞概率 = 99
    收藏概率 = 66
    自动关注 = false
    自动评论 = false
    互动方式 = 0
    密码设置 = ""
    
    -- 设置默认HUD配置
    HUD配置 = {
        启用HUD = true,
        宽度 = 500,
        高度 = 22,
        X位置 = 0,
        Y位置 = 80,
        字体大小 = 10,
        最大日志数 = 6,
        字体颜色 = "0xffff0000",
        背景颜色 = "0x60ffffff",
        日志格式 = "{时间} {内容}"
    }
    
    -- 创建获取HUD配置函数
    function 获取HUD配置()
        return HUD配置
    end
else
    print("UI配置加载成功")
end

require("base_functions")
local node_config = require("node_config")  -- 引入节点配置

-- 初始化时检测并设置分辨率
function 初始化分辨率设置()
    local width, height = 获取屏幕分辨率()
    调试输出("检测到屏幕分辨率: " .. width .. "x" .. height)
    
    -- 根据检测到的分辨率设置对应的配置
    if width == 1080 and height == 1920 then
        调试输出("使用1080p分辨率配置")
        node_config.设置当前分辨率(1080, 1920)
    elseif width == 720 and height == 1280 then
        调试输出("使用720p分辨率配置")
        node_config.设置当前分辨率(720, 1280)
    else
        调试输出("未匹配到预设分辨率，使用默认720p配置并进行坐标转换")
        -- 设置为720p的基础上启用坐标转换
        node_config.设置当前分辨率(720, 1280, {
            宽度比例 = width / 720,
            高度比例 = height / 1280
        })
    end
    
    调试输出("分辨率适配设置完成")
end

-- 将必要函数导出到全局命名空间
_G.中心发现节点 = 中心发现节点
_G.检查APP已启动 = 检查APP已启动
_G.检查收藏意外弹窗 = 检查收藏意外弹窗
_G.模拟按键 = 模拟按键
_G.检查视频界面 = 检查视频界面  -- 添加新函数到全局命名空间

-- 兼容性处理：如果keypress不存在，使用模拟按键函数替代
if not _G.keypress then
    _G.keypress = 模拟按键
    调试输出("创建keypress函数的兼容性替代")
end

-- 全局变量
local 总运行时间 = 0
if 运行时间 then
    -- 确保运行时间是有效的数字
    if type(运行时间) == "number" and 运行时间 > 0 then
        总运行时间 = 运行时间 * 60
    else
        -- 尝试转换字符串值
        local 数值 = tonumber(运行时间)
        if 数值 and 数值 > 0 then
            总运行时间 = 数值 * 60
        else
            总运行时间 = 3 * 60  -- 默认3分钟
        end
    end
else
    总运行时间 = 3 * 60  -- 默认3分钟
end

print("设置总运行时间: " .. 总运行时间 .. "秒 (" .. (总运行时间/60) .. "分钟)")

local 福利检查间隔 = 1800    -- 默认30分钟检查一次福利
local 是否启用时间控制 = true
local 开始时间 = 0           -- 记录开始时间
local 累计运行时间 = 0       -- 记录累计运行时间

-- 打开APP并等待启动
function 打开APP并等待(等待时间)
    等待时间 = 等待时间 or 5  -- 默认等待5秒
    
    -- 首先通过倍速节点检查是否已进入视频界面
    if 检查视频界面() then
        调试输出("已检测到视频播放界面，APP已正常启动")
        return true
    end
    
    -- 再检查APP是否已启动（通过首页选项卡）
    if 检查APP已启动() then
        调试输出("APP已在运行中，无需启动")
        return true
    end
    
    调试输出("正在打开APP: " .. node_config.APP包名)
    runApp(node_config.APP包名)
    
    -- 尝试最多10次检查APP界面（每次等待0.5秒）
    local 最大尝试次数 = 10
    for i = 1, 最大尝试次数 do
        sleep(500)  -- 等待0.5秒再检查
        调试输出("检查APP界面，尝试次数: " .. i)
        
        -- 首先检查视频界面
        if 检查视频界面() then
            调试输出("已检测到视频播放界面，APP启动成功")
            return true
        end
        
        -- 再检查首页
        if 检查APP已启动() then
            调试输出("APP已成功启动并进入界面")
            return true
        end
    end
    
    -- 如果检查超时，再等待一段时间
    调试输出("未检测到APP界面，等待" .. 等待时间 .. "秒")
    sleep(等待时间 * 1000)
    
    调试输出("APP启动流程完成")
    return true
end

-- 已禁用点赞收藏功能
-- 随机收藏点赞函数已被移除

function 功能_红果搜索关键词刷视频()
    -- 初始化HUD日志系统
    初始化HUD系统({
        最大日志数 = 6,
        字体大小 = 10,
        字体颜色 = "0xffff0000",
        背景颜色 = "0x60ffffff",  -- 半透明白色背景
        Y位置 = 80,
        宽度 = 500,
        高度 = 22
    })
    
    调试输出("开始关键词搜索刷视频功能")
    
    -- 打开APP并等待
    打开APP并等待(5)
    
    -- 检查是否已在视频界面
    if 检查视频界面() then
        调试输出("已在视频界面，先返回首页再搜索")
        -- 尝试返回操作
        for i = 1, 2 do
            keypress(4)  -- Android返回键
            sleep(1500)
            -- 检查是否回到首页
            if 中心发现节点(node_config.首页选项卡) then
                调试输出("已返回首页")
                break
            end
        end
    else
        -- 点击推荐节点
        if 中心找节点(node_config.推荐节点, true) then
            调试输出("已点击推荐节点")
            sleep(2000)  -- 等待页面加载
        else
            调试输出("未找到推荐节点")
        end
    end
    
    -- 搜索所有关键词列表并刷视频
    while true do
        -- 检查时间控制
        if not 功能_时间控制业务逻辑() then
            调试输出("任务结束")
            break
        end
        
        -- 检查是否在首页，如不在则尝试返回
        if not 中心发现节点(node_config.首页选项卡) then
            调试输出("不在首页，尝试返回")
            for i = 1, 3 do
                keypress(4)  -- Android返回键
                sleep(1500)
                -- 检查是否回到首页
                if 中心发现节点(node_config.首页选项卡) then
                    调试输出("已返回首页")
                    break
                end
            end
        end
        
        if 方框找节点(node_config.首页搜索, true) then
            sleep(1000)  -- 等待界面响应
            方框找节点(node_config.首页搜索, true)
            节点输入内容(node_config.输入内容1, 话术语)
            调试输出("输入内容成功")
            sleep(1000)  -- 等待输入完成
            
            if 中心找节点(node_config.搜索, true) then
                调试输出("点击搜索按钮")
                sleep(2000)  -- 等待搜索结果
                
                -- 在搜索结果中点击第一个视频
                if node_config.搜索结果第一项 and 中心找节点(node_config.搜索结果第一项, true) then
                    调试输出("点击搜索结果第一项")
                    sleep(2000)
                else
                    -- 如果没有定义搜索结果节点，尝试点击搜索结果列表中的位置
                    local 屏幕宽度, 屏幕高度 = 获取屏幕分辨率()
                    点击坐标(屏幕宽度/2, 屏幕高度/4, 500)
                    调试输出("点击搜索结果区域")
                    sleep(2000)
                end
                
                -- 检查是否成功进入视频界面
                if 检查视频界面() then
                    调试输出("已进入视频播放界面")
                    
                    -- 在视频界面内循环浏览一段时间
                    local 视频浏览次数 = 0
                    while 视频浏览次数 < 5 and 检查视频界面() do
                        -- 随机观看时间 22-28秒
                        local 观看时间 = math.random(22, 28)
                        调试输出("观看第" .. (视频浏览次数+1) .. "个视频 " .. 观看时间 .. "秒")
                        sleep(观看时间 * 1000)  -- 转换为毫秒
                        
                        -- 随机收藏点赞（66%概率）
                        local 随机数 = math.random(1, 100)
                        if 随机数 <= 66 then
                            调试输出("执行互动操作")
                            随机收藏点赞()
                        end
                        
                        -- 执行随机上滑到下一个视频
                        随机上滑()
                        视频浏览次数 = 视频浏览次数 + 1
                    end
                    
                    -- 返回首页开始新一轮搜索
                    调试输出("完成视频浏览，返回首页")
                    for i = 1, 3 do
                        keypress(4)  -- Android返回键
                        sleep(1500)
                        -- 检查是否回到首页
                        if 中心发现节点(node_config.首页选项卡) then
                            调试输出("已返回首页")
                            break
                        end
                    end
                else
                    调试输出("未能进入视频播放界面，尝试返回首页")
                    keypress(4)  -- Android返回键
                    sleep(1500)
                end
            else
                调试输出("未找到搜索按钮")
            end
        else
            调试输出("未找到搜索框")
        end
        
        sleep(3000)  -- 主循环延时
    end
end

function 功能_福利开宝箱()
    调试输出("开始处理宝箱")
    
    -- 查找并点击宝箱按钮
    if 中心找节点(node_config.宝箱按钮, true) then
        sleep(2000)  -- 等待宝箱界面加载
        
        -- 点击开宝箱按钮
        if 中心找节点(node_config.开宝箱按钮, true) then
            调试输出("点击开宝箱")
            sleep(3000)  -- 等待动画和广告按钮出现
            
            -- 检查是否有看广告得金币的选项
            if 中心找节点(node_config.看广告得金币, true) then
                调试输出("观看广告得金币")
                sleep(35000)  -- 等待广告播放（通常30秒）
                
                -- 尝试关闭广告
                for i = 1, 3 do
                    if 中心找节点(node_config.返回按钮, true) then
                        sleep(1000)
                    end
                end
            end
        end
        
        -- 返回主界面
        for i = 1, 3 do
            if 中心找节点(node_config.返回按钮, true) then
                sleep(1000)
            else
                break
            end
        end
        
        return true
    else
        调试输出("未找到宝箱按钮")
        return false
    end
end

function 功能_福利收益日报()
    调试输出("开始处理收益日报")
    
    -- 查找并点击收益日报按钮
    if 中心找节点(node_config.收益日报按钮, true) then
        sleep(2000)  -- 等待界面加载
        
        -- 查找并点击立即领取按钮
        if 中心找节点(node_config.立即领取按钮, true) then
            调试输出("领取收益日报奖励成功")
            sleep(2000)  -- 等待领取动画
            
            -- 可能需要关闭弹窗，尝试点击返回
            if 中心找节点(node_config.返回按钮, true) then
                sleep(1000)
            end
        else
            调试输出("未找到立即领取按钮")
        end
        
        return true
    else
        调试输出("未找到收益日报按钮")
        return false
    end
end

function 功能_福利业务逻辑()
    调试输出("开始处理福利业务")
    
    -- 使用计数变量跟踪尝试次数
    local 尝试次数 = 0
    local 最大尝试次数 = 1
    
    -- 1. 先确保回到首页
    调试输出("确保回到首页")
    while 尝试次数 < 最大尝试次数 do
        -- 尝试查找首页选项卡，如果找到则点击
        if 中心找节点(node_config.首页选项卡, true) then
            调试输出("成功回到首页")
            sleep(2000)  -- 等待界面加载
            break
        end
        
        -- 如果找不到首页选项卡，尝试返回操作
        调试输出("尝试返回操作")
        if 中心找节点(node_config.返回按钮, true) then
            sleep(1500)
        else
            -- 如果连返回按钮都找不到，可能卡在特殊界面
            调试输出("无法找到返回按钮，尝试按返回键")
            keypress(4)  -- Android返回键
            sleep(1500)
        end
        
        尝试次数 = 尝试次数 + 1
    end
    
    if 尝试次数 >= 最大尝试次数 then
        调试输出("无法返回首页，放弃福利处理")
        return false
    end
    
    -- 2. 处理宝箱
    调试输出("开始处理宝箱")
    local 宝箱结果 = 功能_福利开宝箱()
    sleep(2000)
    
    -- 再次确保在首页
    中心找节点(node_config.首页, true)
    sleep(2000)
    
    -- 3. 处理收益日报
    调试输出("开始处理收益日报")
    local 收益日报结果 = 功能_福利收益日报()
    sleep(2000)
    
    -- 再次确保在首页
    
    -- 再次确保在首页
    中心找节点(node_config.首页选项卡, true)
    sleep(2000)
    
    -- 4. 处理福利页面
    调试输出("开始处理福利页面")
    local 福利处理成功 = false
    
    -- 尝试点击福利按钮
    if node_config.福利选项卡 and 中心找节点(node_config.福利选项卡, true) then
        调试输出("成功切换到福利选项卡")
        sleep(2500)  -- 等待福利界面加载
        福利处理成功 = true
    elseif node_config.福利按钮 and 中心找节点(node_config.福利按钮, true) then
        调试输出("成功点击福利按钮")
        sleep(2500)  -- 等待福利界面加载
        福利处理成功 = true
    else
        调试输出("未找到福利入口")
        return false
    end
    
    if 福利处理成功 then
        -- 处理每日签到
        if node_config.签到按钮 and 中心找节点(node_config.签到按钮, true) then
            调试输出("完成每日签到")
            sleep(1500)
        else
            调试输出("未找到签到按钮或已签到")
        end
        
        -- 处理可领取的福利
        local 领取计数 = 0
        local 连续失败计数 = 0
        
        -- 循环处理所有可领取福利，直到找不到更多福利或达到最大尝试次数
        while 连续失败计数 < 3 and 领取计数 < 10 do
            if node_config.可领取福利 and 中心找节点(node_config.可领取福利, true) then
                调试输出("领取福利成功")
                领取计数 = 领取计数 + 1
                连续失败计数 = 0  -- 重置失败计数
                sleep(1500)
            else
                连续失败计数 = 连续失败计数 + 1
                sleep(1000)
            end
        end
        
        调试输出("本次共领取 " .. 领取计数 .. " 个福利")
        
        -- 返回首页
        调试输出("返回首页")
        尝试次数 = 0
        while 尝试次数 < 最大尝试次数 do
            if 中心找节点(node_config.首页, true) then
                调试输出("成功返回首页")
                sleep(2000)
                break
            end
            
            if 中心找节点(node_config.返回按钮, true) then
                sleep(1500)
            else
                keypress(4)  -- Android返回键
                sleep(1500)
            end
            
            尝试次数 = 尝试次数 + 1
        end

        -- 返回首页
        调试输出("返回首页")
        尝试次数 = 0
        while 尝试次数 < 最大尝试次数 do
            if 中心找节点(node_config.首页选项卡, true) then
                调试输出("成功返回首页")
                sleep(2000)
                break
            end
            
            if 中心找节点(node_config.返回按钮, true) then
                sleep(1500)
            else
                keypress(4)  -- Android返回键
                sleep(1500)
            end
            
            尝试次数 = 尝试次数 + 1
        end
        
        return true
    end
    
    return false
end

function 功能_时间控制业务逻辑()
    -- 初始化开始时间（如果还未初始化）
    if 开始时间 == 0 then
        开始时间 = os.time()
        local 时间信息 = os.date("*t", 开始时间)
        调试输出(string.format("开始: %02d:%02d:%02d",
            时间信息.hour, 时间信息.min, 时间信息.sec))
    end
    
    -- 计算当前运行时间
    local 当前时间 = os.time()
    累计运行时间 = 当前时间 - 开始时间
    
    -- 检查总运行时间
    if 是否启用时间控制 and 累计运行时间 >= 总运行时间 then
        local 结束时间信息 = os.date("*t", 当前时间)
        调试输出(string.format("任务完成，结束时间: %02d:%02d:%02d",
            结束时间信息.hour, 结束时间信息.min, 结束时间信息.sec))
        -- 销毁HUD
        销毁HUD()
        return false
    end
    
    -- 每2分钟点击一次福利页面
    if math.floor(累计运行时间) % 120 == 0 then
        调试输出("每2分钟点击福利页面")
        
        -- 尝试点击福利选项卡
        if node_config.福利选项卡 and 中心找节点(node_config.福利选项卡, true) then
            调试输出("成功点击福利选项卡")
            sleep(2000)  -- 等待福利页面加载
            
            -- 返回首页
            if 中心找节点(node_config.首页选项卡, true) then
                调试输出("返回首页")
                sleep(2000)
            end
        else
            调试输出("未找到福利选项卡")
        end
    end
    
    -- 检查是否需要处理福利（每30分钟完整处理一次）
    if math.floor(累计运行时间) % 福利检查间隔 == 0 then
        调试输出("开始福利检查")
        功能_福利业务逻辑()
    end
    
    -- 显示进度条
    显示进度(累计运行时间, 总运行时间, "进度")
    
    -- 输出运行状态（精确到秒）
    local 状态信息 = string.format("已运行%d分%d秒/%d分钟", 
        math.floor(累计运行时间/60),
        math.floor(累计运行时间%60),
        math.floor(总运行时间/60))
    
    调试输出(状态信息)
        
    return true
end

function 功能_滑动刷视频()
    -- 初始化HUD日志系统
    初始化HUD系统({
        最大日志数 = 6,
        字体大小 = 10,
        字体颜色 = "0xffff0000",
        背景颜色 = "0x60ffffff",  -- 半透明白色背景
        Y位置 = 80,
        宽度 = 500,
        高度 = 22
    })
    
    调试输出("开始滑动刷视频")
    
    -- 启动APP并等待5秒
    打开APP并等待(5)
    
    -- 检查是否已进入视频界面
    if 检查视频界面() then
        调试输出("已在视频播放界面，无需点击推荐")
    else
        -- 如果未在视频界面，尝试点击推荐节点
        if 中心找节点(node_config.推荐节点, true) then
            调试输出("已点击推荐节点")
            sleep(2000)  -- 等待页面加载
        else
            调试输出("未找到推荐节点")
        end
        
        -- 再次检查是否进入视频界面
        if 检查视频界面() then
            调试输出("已成功进入视频界面")
        else
            调试输出("警告：未检测到视频界面，可能需要手动操作")
        end
    end
    
    -- 循环滑动观看视频
    while true do
        -- 检查时间控制
        if not 功能_时间控制业务逻辑() then
            调试输出("任务结束")
            break
        end
        
        -- 检查是否有意外弹窗（每次循环前都检查一次）
        处理收藏意外弹窗()
        
        -- 检查是否在视频界面
        if not 检查视频界面() then
            调试输出("警告：已离开视频播放界面，尝试恢复")
            -- 尝试点击推荐或返回首页等操作恢复
            if 中心找节点(node_config.推荐节点, true) then
                调试输出("点击推荐节点恢复")
                sleep(2000)
            elseif 中心找节点(node_config.首页选项卡, true) then
                调试输出("点击首页选项卡恢复")
                sleep(2000)
                中心找节点(node_config.推荐节点, true)
                sleep(2000)
            end
            
            -- 再次检查是否恢复
            if 检查视频界面() then
                调试输出("已成功恢复到视频界面")
            else
                调试输出("无法恢复到视频界面，继续尝试")
            end
        end
        
        -- 随机观看时间 22-28秒
        local 观看时间 = math.random(22, 28)
        调试输出("观看" .. 观看时间 .. "秒")
        sleep(观看时间 * 1000)  -- 转换为毫秒
        
        -- 随机收藏点赞（66%概率）
        local 随机数 = math.random(1, 100)
        if 随机数 <= 66 then
            调试输出("执行互动操作")
            随机收藏点赞() -- 调用base_functions.lua中的函数
            -- 随机收藏点赞函数内部已有弹窗检测，此处可不必再次检测
        end
        
        -- 执行随机上滑
        随机上滑()
        
        -- 每5次滑动后增加一个较长的停顿
        if math.random(1, 5) == 1 then
            local 额外停顿 = math.random(6, 8)
            调试输出("额外停留" .. 额外停顿 .. "秒")
            sleep(额外停顿 * 1000)  -- 转换为毫秒
            
            -- 长停顿后再检查一次意外弹窗
            处理收藏意外弹窗()
        end
    end
end

-- 程序清理函数
function 程序清理()
    调试输出("清理资源...")
    
    -- 清理HUD资源
    销毁HUD()
    
    调试输出("程序结束")
end

-- HUD日志系统演示函数
function 演示HUD日志系统()
    -- 初始化HUD
    初始化HUD系统({
        最大日志数 = 8,
        字体大小 = 10,
        字体颜色 = "0xffff0000",
        背景颜色 = "0x60ffffff",
        Y位置 = 80,
        宽度 = 500,
        高度 = 22
    })
    
    -- 设置日志格式
    设置日志格式("⏱️ {时间} {内容}")
    
    -- 添加各种级别的日志
    调试输出("这是一条调试日志")
    sleep(1000)
    
    添加日志("这是一条普通信息日志", "信息")
    sleep(1000)
    
    警告日志("这是一条警告日志")
    sleep(1000)
    
    错误日志("这是一条错误日志")
    sleep(1000)
    
    -- 显示进度条演示
    for i = 1, 10 do
        显示进度(i, 10, "加载进度")
        sleep(500)
    end
    
    调试输出("进度演示完成")
    sleep(1000)
    
    -- 切换HUD显示
    调试输出("即将隐藏HUD")
    sleep(1000)
    切换HUD显示(false)
    sleep(2000)
    
    调试输出("即将重新显示HUD") -- 这条不会显示，因为HUD已隐藏
    切换HUD显示(true)
    调试输出("HUD已重新显示")
    sleep(1000)
    
    -- 清空日志
    调试输出("即将清空日志")
    sleep(1000)
    清空日志()
    调试输出("日志已清空")
    sleep(1000)
    
    -- 设置状态信息
    设置状态信息("这是一条固定显示的状态信息")
    sleep(1000)
    
    -- 添加更多日志
    for i = 1, 5 do
        调试输出("测试日志 #" .. i)
        sleep(500)
    end
    
    -- 清除状态信息
    调试输出("即将清除状态信息")
    sleep(1000)
    清除状态信息()
    
    -- 销毁HUD
    调试输出("演示结束，即将销毁HUD")
    sleep(2000)
    销毁HUD()
end

-- HUD配置处理函数
function 处理HUD配置按钮事件(event)
    print("处理HUD配置按钮事件: " .. tostring(event))
    
    if event == "applyHudButton" then
        -- 获取UI配置
        local config = 获取HUD配置()
        
        -- 应用HUD配置
        应用HUD配置({
            最大日志数 = config.最大日志数,
            字体大小 = config.字体大小,
            字体颜色 = config.字体颜色,
            背景颜色 = config.背景颜色,
            X位置 = config.X位置,
            Y位置 = config.Y位置,
            宽度 = config.宽度,
            高度 = config.高度
        })
        
        return true
    elseif event == "previewHudButton" then
        -- 获取UI配置
        local config = 获取HUD配置()
        
        -- 预览HUD配置
        预览HUD配置({
            最大日志数 = config.最大日志数,
            字体大小 = config.字体大小,
            字体颜色 = config.字体颜色,
            背景颜色 = config.背景颜色,
            X位置 = config.X位置,
            Y位置 = config.Y位置,
            宽度 = config.宽度,
            高度 = config.高度
        })
        
        return true
    elseif event == "resetHudButton" then
        -- 重置HUD配置
        重置HUD配置()
        return true
    end
    
    return false
end

-- 按钮事件处理函数 (在UI中配置按钮点击事件调用此函数)
function 处理按钮事件(event)
    print("接收到按钮事件: " .. tostring(event))
    
    -- HUD配置按钮
    if event == "applyHudButton" or event == "previewHudButton" or event == "resetHudButton" then
        return 处理HUD配置按钮事件(event)
    end
    
    -- 主页面按钮
    if event == "startButton" then
        -- 启动主程序
        主程序()
        return true
    elseif event == "stopButton" then
        -- 停止运行
        pcall(程序清理)
        print("程序已停止")
        return true
    end
    
    return false
end

-- 启动主程序
if not _G.keypress and not _G.press and not _G.pressKey then
    print("警告: 未找到按键模拟函数，已创建兼容性替代")
end

-- 运行环境函数可用性测试
pcall(测试环境函数可用性)

-- 主程序
function 主程序()
    -- 使用pcall代替setExitHandler
    local success, error_msg = pcall(function()
        -- 检查node_config是否加载成功
        if node_config == nil then
            error("node_config 模块加载失败")
        end
        
        -- 检查必要的节点配置
        if node_config.APP包名 == nil then
            error("node_config 中缺少APP包名配置")
        end
        
        -- 尝试初始化HUD系统
        local hud_id = nil
        local hud_success, hud_error = pcall(function()
            hud_id = 初始化HUD系统({
                最大日志数 = 6,
                字体大小 = 10,
                字体颜色 = "0xffff0000",
                背景颜色 = "0x60ffffff",  -- 半透明白色背景
                Y位置 = 80,
                宽度 = 500,
                高度 = 22
            })
            return hud_id
        end)
        
        if not hud_success then
            print("HUD系统初始化失败: " .. tostring(hud_error) .. "，将使用简单输出")
        end
        
        -- 输出启动信息
        print("懒人学习脚本已启动")
        print("当前功能: " .. (功能选择 or "未选择"))
        print("运行时间设置: " .. 总运行时间 / 60 .. "分钟")
        
        -- 如果HUD正常，也通过HUD输出
        if HUD是否可用() then
            调试输出("懒人学习脚本已启动", 0)
            调试输出("当前功能: " .. (功能选择 or "未选择"), 0)
            调试输出("运行时间设置: " .. 总运行时间 / 60 .. "分钟", 0)
        end
        
        -- 根据选择执行不同功能
        if 功能选择 == "搜索关键词刷视频" then
            功能_红果搜索关键词刷视频()
        elseif 功能选择 == "HUD日志演示" then
            演示HUD日志系统()
        else
            -- 默认功能
            功能_滑动刷视频()
        end
    end)
    
    -- 程序结束时处理错误
    if not success then
        print("脚本执行出错: " .. tostring(error_msg))
        -- 如果HUD可用，显示错误
        if HUD是否可用() then
            错误日志("脚本执行出错: " .. tostring(error_msg))
            sleep(3000)  -- 显示一段时间让用户看到错误
        end
    end
    
    -- 最后调用清理函数
    pcall(程序清理)  -- 使用pcall防止清理过程中出错
    
    print("脚本执行结束")
end

-- 测试打开APP功能
function 测试打开APP()
    -- 初始化HUD日志系统
    初始化HUD系统({
        最大日志数 = 6,
        字体大小 = 10,
        字体颜色 = "0xffff0000",
        背景颜色 = "0x60ffffff",  -- 半透明白色背景
        Y位置 = 80,
        宽度 = 500,
        高度 = 22
    })
    
    调试输出("测试打开APP功能")
    
    -- 打开APP并等待5秒
    打开APP并等待(5)
    
    -- 尝试找到并点击推荐节点
    if 中心找节点(node_config.推荐节点, true) then
        调试输出("已找到并点击推荐节点")
    else
        调试输出("未找到推荐节点")
    end
    
    调试输出("测试完成")
end

-- 将测试函数添加到全局
_G.测试打开APP = 测试打开APP

-- 处理收藏操作后的意外弹窗
function 处理收藏意外弹窗()
    调试输出("检查是否存在收藏意外弹窗")
    local 处理结果 = 检查收藏意外弹窗()
    
    if 处理结果 then
        调试输出("已处理收藏意外弹窗")
    else
        调试输出("未发现收藏意外弹窗")
    end
    
    return 处理结果
end

-- 测试环境函数可用性
function 测试环境函数可用性()
    调试输出("开始测试环境函数可用性")
    
    -- 测试关键函数
    local 函数表 = {
        "tap", "swipe", "sleep", "pressKey", "press", "keypress", 
        "getDisplaySize", "runApp", "findOne", "className"
    }
    
    -- 输出结果
    for _, 函数名 in ipairs(函数表) do
        local 是否可用 = _G[函数名] ~= nil
        调试输出("函数 " .. 函数名 .. " 是否可用: " .. tostring(是否可用))
    end
    
    -- 测试环境特性
    local 宽度, 高度 = 获取屏幕分辨率()
    调试输出("当前屏幕分辨率: " .. 宽度 .. "x" .. 高度)
    
    -- 测试节点配置
    if node_config then
        调试输出("node_config 加载成功")
        调试输出("APP包名: " .. tostring(node_config.APP包名))
    else
        调试输出("警告: node_config 未加载")
    end
    
    调试输出("测试完成")
end

-- 将测试函数添加到全局
_G.测试环境函数可用性 = 测试环境函数可用性

-- 主函数（扩展功能）
function 主函数()
    -- 初始化分辨率设置
    初始化分辨率设置()
    
    -- 加载最新节点配置
    if _G.识别节点ID and type(_G.识别节点ID) == "function" then
        调试输出("尝试识别最新节点ID...")
        _G.识别节点ID()
        
        -- 更新node_config中的节点信息
        if _G.最新节点配置 then
            -- 点赞收藏功能已被禁用，不再需要更新这些配置
        end
    end
    
    -- 初始化HUD系统
    初始化HUD系统(HUD配置)
    
    -- 功能选择
    if 功能选择 == "滑动刷视频" then
        功能_滑动刷视频()
    elseif 功能选择 == "红果搜索关键词刷视频" then
        功能_红果搜索关键词刷视频()
    elseif 功能选择 == "测试打开APP" then
        测试打开APP()
    elseif 功能选择 == "测试功能" then
        功能_测试()
    elseif 功能选择 == "自定义功能" then
        功能_自定义()
    else
        功能_滑动刷视频()  -- 默认功能
    end
end

-- 将主函数添加到全局
_G.主函数 = 主函数

-- 启动脚本
if not _G.__SCRIPT_ALREADY_RUNNING then
    _G.__SCRIPT_ALREADY_RUNNING = true
    
    -- 检查环境
    if not _G.keypress and not _G.press and not _G.pressKey then
        print("警告: 未找到按键模拟函数，已创建兼容性替代")
    end
    
    -- 运行环境函数可用性测试
    pcall(测试环境函数可用性)
    
    -- 初始化分辨率设置
    pcall(初始化分辨率设置)
    
    -- 启动主程序
    主程序()
end
